# 让我们一起来玩扫雷游戏！
#
# 给定一个代表游戏板的二维字符矩阵。 'M' 代表一个未挖出的地雷，'E' 代表一个未挖出的空方块，'B' 代表没有相邻（上，下，左，右，和所有4个对角线）地雷的已挖出的空白方块，数字（'1' 到
# '8'）表示有多少地雷与这块已挖出的方块相邻，'X' 则表示一个已挖出的地雷。
#
# 现在给出在所有未挖出的方块中（'M'或者'E'）的下一个点击位置（行和列索引），根据以下规则，返回相应位置被点击后对应的面板：
#
# 如果一个地雷（'M'）被挖出，游戏就结束了- 把它改为 'X'。
# 如果一个没有相邻地雷的空方块（'E'）被挖出，修改它为（'B'），并且所有和其相邻的未挖出方块都应该被递归地揭露。
# 如果一个至少与一个地雷相邻的空方块（'E'）被挖出，修改它为数字（'1'到'8'），表示相邻地雷的数量。
# 如果在此次点击中，若无更多方块可被揭露，则返回面板。
import sys

board = [["E", "E", "E", "E", "E", "E", "E", "E"],
         ["E", "E", "E", "E", "E", "E", "E", "M"],
         ["E", "E", "M", "E", "E", "E", "E", "E"],
         ["M", "E", "E", "E", "E", "E", "E", "E"],
         ["E", "E", "E", "E", "E", "E", "E", "E"],
         ["E", "E", "E", "E", "E", "E", "E", "E"],
         ["E", "E", "E", "E", "E", "E", "E", "E"],
         ["E", "E", "M", "M", "E", "E", "E", "E"]]

click = [0, 0]

# 以下是题解

x = click[0]
y = click[1]
dirX = [1, 1, 1, -1, -1, -1, 0, 0]
dirY = [0, 1, -1, 1, 0, -1, 1, -1]


def dfs(my_x, my_y):
    this_x = my_x
    this_y = my_y
    # 统计周围的地雷数
    m = 0
    for i in range(8):
        my_x = this_x + dirX[i]
        my_y = this_y + dirY[i]
        if my_x < len(board):
            if my_y < len(board[0]):
                if my_x >= 0:
                    if my_y >= 0:
                        if board[my_x][my_y] == 'M':
                            # 如果尚未发现任何地雷，初始化
                            m = m + 1
            else:
                continue
        else:
            continue

    if m > 0:
        board[this_x][this_y] = str(m)

    # 如果周围没有地雷，继续寻找
    if board[this_x][this_y] == 'E':
        board[this_x][this_y] = 'B'
        for i in range(8):
            my_x = this_x + dirX[i]
            my_y = this_y + dirY[i]
            if my_x < len(board):
                if my_y < len(board[0]):
                    if my_x >= 0:
                        if my_y >= 0:
                            # 只有在周围没有被点击且不是雷的情况再开始搜索
                            if board[my_x][my_y] == 'E':
                                dfs(my_x, my_y)
                            else:
                                continue
                else:
                    continue
            else:
                continue


if board[x][y] == 'M':
    board[x][y] = 'X'
else:
    dfs(x, y)

print(board)
